/*!
 * vue-resource v1.5.1
 * https://github.com/pagekit/vue-resource
 * Released under the MIT License.
 */

! function (t, e) {
  "object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : t.VueResource = e()
}(this, function () {
  "use strict";

  function u(t) {
    this.state = 2, this.value = void 0, this.deferred = [];
    var e = this;
    try {
      t(function (t) {
        e.resolve(t)
      }, function (t) {
        e.reject(t)
      })
    } catch (t) {
      e.reject(t)
    }
  }
  u.reject = function (n) {
    return new u(function (t, e) {
      e(n)
    })
  }, u.resolve = function (n) {
    return new u(function (t, e) {
      t(n)
    })
  }, u.all = function (s) {
    return new u(function (n, t) {
      var o = 0,
        r = [];

      function e(e) {
        return function (t) {
          r[e] = t, (o += 1) === s.length && n(r)
        }
      }
      0 === s.length && n(r);
      for (var i = 0; i < s.length; i += 1) u.resolve(s[i]).then(e(i), t)
    })
  }, u.race = function (o) {
    return new u(function (t, e) {
      for (var n = 0; n < o.length; n += 1) u.resolve(o[n]).then(t, e)
    })
  };
  var t = u.prototype;

  function c(t, e) {
    t instanceof Promise ? this.promise = t : this.promise = new Promise(t.bind(e)), this.context = e
  }
  t.resolve = function (t) {
    var e = this;
    if (2 === e.state) {
      if (t === e) throw new TypeError("Promise settled with itself.");
      var n = !1;
      try {
        var o = t && t.then;
        if (null !== t && "object" == typeof t && "function" == typeof o) return void o.call(t, function (t) {
          n || e.resolve(t), n = !0
        }, function (t) {
          n || e.reject(t), n = !0
        })
      } catch (t) {
        return void(n || e.reject(t))
      }
      e.state = 0, e.value = t, e.notify()
    }
  }, t.reject = function (t) {
    var e = this;
    if (2 === e.state) {
      if (t === e) throw new TypeError("Promise settled with itself.");
      e.state = 1, e.value = t, e.notify()
    }
  }, t.notify = function () {
    var t, i = this;
    r(function () {
      if (2 !== i.state)
        for (; i.deferred.length;) {
          var t = i.deferred.shift(),
            e = t[0],
            n = t[1],
            o = t[2],
            r = t[3];
          try {
            0 === i.state ? o("function" == typeof e ? e.call(void 0, i.value) : i.value) : 1 === i.state && ("function" == typeof n ? o(n.call(void 0, i.value)) : r(i.value))
          } catch (t) {
            r(t)
          }
        }
    }, t)
  }, t.then = function (n, o) {
    var r = this;
    return new u(function (t, e) {
      r.deferred.push([n, o, t, e]), r.notify()
    })
  }, t.catch = function (t) {
    return this.then(void 0, t)
  }, "undefined" == typeof Promise && (window.Promise = u), c.all = function (t, e) {
    return new c(Promise.all(t), e)
  }, c.resolve = function (t, e) {
    return new c(Promise.resolve(t), e)
  }, c.reject = function (t, e) {
    return new c(Promise.reject(t), e)
  }, c.race = function (t, e) {
    return new c(Promise.race(t), e)
  };
  var e = c.prototype;
  e.bind = function (t) {
    return this.context = t, this
  }, e.then = function (t, e) {
    return t && t.bind && this.context && (t = t.bind(this.context)), e && e.bind && this.context && (e = e.bind(this.context)), new c(this.promise.then(t, e), this.context)
  }, e.catch = function (t) {
    return t && t.bind && this.context && (t = t.bind(this.context)), new c(this.promise.catch(t), this.context)
  }, e.finally = function (e) {
    return this.then(function (t) {
      return e.call(this), t
    }, function (t) {
      return e.call(this), Promise.reject(t)
    })
  };
  var r, i = {}.hasOwnProperty,
    o = [].slice,
    a = !1,
    s = "undefined" != typeof window;

  function f(t) {
    return t ? t.replace(/^\s*|\s*$/g, "") : ""
  }

  function p(t) {
    return t ? t.toLowerCase() : ""
  }
  var h = Array.isArray;

  function d(t) {
    return "string" == typeof t
  }

  function l(t) {
    return "function" == typeof t
  }

  function m(t) {
    return null !== t && "object" == typeof t
  }

  function y(t) {
    return m(t) && Object.getPrototypeOf(t) == Object.prototype
  }

  function v(t, e, n) {
    var o = c.resolve(t);
    return arguments.length < 2 ? o : o.then(e, n)
  }

  function b(t, e, n) {
    return l(n = n || {}) && (n = n.call(e)), T(t.bind({
      $vm: e,
      $options: n
    }), t, {
      $options: n
    })
  }

  function g(t, e) {
    var n, o;
    if (h(t))
      for (n = 0; n < t.length; n++) e.call(t[n], t[n], n);
    else if (m(t))
      for (o in t) i.call(t, o) && e.call(t[o], t[o], o);
    return t
  }
  var w = Object.assign || function (e) {
    return o.call(arguments, 1).forEach(function (t) {
      x(e, t)
    }), e
  };

  function T(e) {
    return o.call(arguments, 1).forEach(function (t) {
      x(e, t, !0)
    }), e
  }

  function x(t, e, n) {
    for (var o in e) n && (y(e[o]) || h(e[o])) ? (y(e[o]) && !y(t[o]) && (t[o] = {}), h(e[o]) && !h(t[o]) && (t[o] = []), x(t[o], e[o], n)) : void 0 !== e[o] && (t[o] = e[o])
  }

  function j(t, e, n) {
    var o, u, a, r = (o = t, u = ["+", "#", ".", "/", ";", "?", "&"], {
        vars: a = [],
        expand: function (s) {
          return o.replace(/\{([^{}]+)\}|([^{}]+)/g, function (t, e, n) {
            if (e) {
              var o = null,
                r = [];
              if (-1 !== u.indexOf(e.charAt(0)) && (o = e.charAt(0), e = e.substr(1)), e.split(/,/g).forEach(function (t) {
                  var e = /([^:*]*)(?::(\d+)|(\*))?/.exec(t);
                  r.push.apply(r, function (t, e, n, o) {
                    var r = t[n],
                      i = [];
                    if (E(r) && "" !== r)
                      if ("string" == typeof r || "number" == typeof r || "boolean" == typeof r) r = r.toString(), o && "*" !== o && (r = r.substring(0, parseInt(o, 10))), i.push(O(e, r, P(e) ? n : null));
                      else if ("*" === o) Array.isArray(r) ? r.filter(E).forEach(function (t) {
                      i.push(O(e, t, P(e) ? n : null))
                    }) : Object.keys(r).forEach(function (t) {
                      E(r[t]) && i.push(O(e, r[t], t))
                    });
                    else {
                      var s = [];
                      Array.isArray(r) ? r.filter(E).forEach(function (t) {
                        s.push(O(e, t))
                      }) : Object.keys(r).forEach(function (t) {
                        E(r[t]) && (s.push(encodeURIComponent(t)), s.push(O(e, r[t].toString())))
                      }), P(e) ? i.push(encodeURIComponent(n) + "=" + s.join(",")) : 0 !== s.length && i.push(s.join(","))
                    } else ";" === e ? i.push(encodeURIComponent(n)) : "" !== r || "&" !== e && "?" !== e ? "" === r && i.push("") : i.push(encodeURIComponent(n) + "=");
                    return i
                  }(s, o, e[1], e[2] || e[3])), a.push(e[1])
                }), o && "+" !== o) {
                var i = ",";
                return "?" === o ? i = "&" : "#" !== o && (i = o), (0 !== r.length ? o : "") + r.join(i)
              }
              return r.join(",")
            }
            return C(n)
          })
        }
      }),
      i = r.expand(e);
    return n && n.push.apply(n, r.vars), i
  }

  function E(t) {
    return null != t
  }

  function P(t) {
    return ";" === t || "&" === t || "?" === t
  }

  function O(t, e, n) {
    return e = "+" === t || "#" === t ? C(e) : encodeURIComponent(e), n ? encodeURIComponent(n) + "=" + e : e
  }

  function C(t) {
    return t.split(/(%[0-9A-Fa-f]{2})/g).map(function (t) {
      return /%[0-9A-Fa-f]/.test(t) || (t = encodeURI(t)), t
    }).join("")
  }

  function $(t, e) {
    var r, i = this || {},
      n = t;
    return d(t) && (n = {
      url: t,
      params: e
    }), n = T({}, $.options, i.$options, n), $.transforms.forEach(function (t) {
      var e, n, o;
      d(t) && (t = $.transform[t]), l(t) && (e = t, n = r, o = i.$vm, r = function (t) {
        return e.call(o, t, n)
      })
    }), r(n)
  }

  function U(i) {
    return new c(function (o) {
      var r = new XDomainRequest,
        t = function (t) {
          var e = t.type,
            n = 0;
          "load" === e ? n = 200 : "error" === e && (n = 500), o(i.respondWith(r.responseText, {
            status: n
          }))
        };
      i.abort = function () {
        return r.abort()
      }, r.open(i.method, i.getUrl()), i.timeout && (r.timeout = i.timeout), r.onload = t, r.onabort = t, r.onerror = t, r.ontimeout = t, r.onprogress = function () {}, r.send(i.getBody())
    })
  }
  $.options = {
    url: "",
    root: null,
    params: {}
  }, $.transform = {
    template: function (e) {
      var t = [],
        n = j(e.url, e.params, t);
      return t.forEach(function (t) {
        delete e.params[t]
      }), n
    },
    query: function (t, e) {
      var n = Object.keys($.options.params),
        o = {},
        r = e(t);
      return g(t.params, function (t, e) {
        -1 === n.indexOf(e) && (o[e] = t)
      }), (o = $.params(o)) && (r += (-1 == r.indexOf("?") ? "?" : "&") + o), r
    },
    root: function (t, e) {
      var n, o, r = e(t);
      return d(t.root) && !/^(https?:)?\//.test(r) && (n = t.root, o = "/", r = (n && void 0 === o ? n.replace(/\s+$/, "") : n && o ? n.replace(new RegExp("[" + o + "]+$"), "") : n) + "/" + r), r
    }
  }, $.transforms = ["template", "query", "root"], $.params = function (t) {
    var e = [],
      n = encodeURIComponent;
    return e.add = function (t, e) {
        l(e) && (e = e()), null === e && (e = ""), this.push(n(t) + "=" + n(e))
      },
      function n(o, t, r) {
        var i, s = h(t),
          u = y(t);
        g(t, function (t, e) {
          i = m(t) || h(t), r && (e = r + "[" + (u || i ? e : "") + "]"), !r && s ? o.add(t.name, t.value) : i ? n(o, t, e) : o.add(e, t)
        })
      }(e, t), e.join("&").replace(/%20/g, "+")
  }, $.parse = function (t) {
    var e = document.createElement("a");
    return document.documentMode && (e.href = t, t = e.href), e.href = t, {
      href: e.href,
      protocol: e.protocol ? e.protocol.replace(/:$/, "") : "",
      port: e.port,
      host: e.host,
      hostname: e.hostname,
      pathname: "/" === e.pathname.charAt(0) ? e.pathname : "/" + e.pathname,
      search: e.search ? e.search.replace(/^\?/, "") : "",
      hash: e.hash ? e.hash.replace(/^#/, "") : ""
    }
  };
  var R = s && "withCredentials" in new XMLHttpRequest;

  function n(u) {
    return new c(function (o) {
      var t, r, e = u.jsonp || "callback",
        i = u.jsonpCallback || "_jsonp" + Math.random().toString(36).substr(2),
        s = null;
      t = function (t) {
        var e = t.type,
          n = 0;
        "load" === e && null !== s ? n = 200 : "error" === e && (n = 500), n && window[i] && (delete window[i], document.body.removeChild(r)), o(u.respondWith(s, {
          status: n
        }))
      }, window[i] = function (t) {
        s = JSON.stringify(t)
      }, u.abort = function () {
        t({
          type: "abort"
        })
      }, u.params[e] = i, u.timeout && setTimeout(u.abort, u.timeout), (r = document.createElement("script")).src = u.getUrl(), r.type = "text/javascript", r.async = !0, r.onload = t, r.onerror = t, document.body.appendChild(r)
    })
  }

  function A(r) {
    return new c(function (n) {
      var o = new XMLHttpRequest,
        t = function (t) {
          var e = r.respondWith("response" in o ? o.response : o.responseText, {
            status: 1223 === o.status ? 204 : o.status,
            statusText: 1223 === o.status ? "No Content" : f(o.statusText)
          });
          g(f(o.getAllResponseHeaders()).split("\n"), function (t) {
            e.headers.append(t.slice(0, t.indexOf(":")), t.slice(t.indexOf(":") + 1))
          }), n(e)
        };
      r.abort = function () {
        return o.abort()
      }, o.open(r.method, r.getUrl(), !0), r.timeout && (o.timeout = r.timeout), r.responseType && "responseType" in o && (o.responseType = r.responseType), (r.withCredentials || r.credentials) && (o.withCredentials = !0), r.crossOrigin || r.headers.set("X-Requested-With", "XMLHttpRequest"), l(r.progress) && "GET" === r.method && o.addEventListener("progress", r.progress), l(r.downloadProgress) && o.addEventListener("progress", r.downloadProgress), l(r.progress) && /^(POST|PUT)$/i.test(r.method) && o.upload.addEventListener("progress", r.progress), l(r.uploadProgress) && o.upload && o.upload.addEventListener("progress", r.uploadProgress), r.headers.forEach(function (t, e) {
        o.setRequestHeader(e, t)
      }), o.onload = t, o.onabort = t, o.onerror = t, o.ontimeout = t, o.send(r.getBody())
    })
  }

  function S(s) {
    var u = require("got");
    return new c(function (e) {
      var n, t = s.getUrl(),
        o = s.getBody(),
        r = s.method,
        i = {};
      s.headers.forEach(function (t, e) {
        i[e] = t
      }), u(t, {
        body: o,
        method: r,
        headers: i
      }).then(n = function (t) {
        var n = s.respondWith(t.body, {
          status: t.statusCode,
          statusText: f(t.statusMessage)
        });
        g(t.headers, function (t, e) {
          n.headers.set(e, t)
        }), e(n)
      }, function (t) {
        return n(t.response)
      })
    })
  }

  function k(t) {
    return (t.client || (s ? A : S))(t)
  }
  var I = function (t) {
    var n = this;
    this.map = {}, g(t, function (t, e) {
      return n.append(e, t)
    })
  };

  function L(t, n) {
    return Object.keys(t).reduce(function (t, e) {
      return p(n) === p(e) ? e : t
    }, null)
  }
  I.prototype.has = function (t) {
    return null !== L(this.map, t)
  }, I.prototype.get = function (t) {
    var e = this.map[L(this.map, t)];
    return e ? e.join() : null
  }, I.prototype.getAll = function (t) {
    return this.map[L(this.map, t)] || []
  }, I.prototype.set = function (t, e) {
    this.map[function (t) {
      if (/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(t)) throw new TypeError("Invalid character in header field name");
      return f(t)
    }(L(this.map, t) || t)] = [f(e)]
  }, I.prototype.append = function (t, e) {
    var n = this.map[L(this.map, t)];
    n ? n.push(f(e)) : this.set(t, e)
  }, I.prototype.delete = function (t) {
    delete this.map[L(this.map, t)]
  }, I.prototype.deleteAll = function () {
    this.map = {}
  }, I.prototype.forEach = function (n, o) {
    var r = this;
    g(this.map, function (t, e) {
      g(t, function (t) {
        return n.call(o, t, e, r)
      })
    })
  };
  var q = function (t, e) {
    var n, o, r, i = e.url,
      s = e.headers,
      u = e.status,
      a = e.statusText;
    this.url = i, this.ok = 200 <= u && u < 300, this.status = u || 0, this.statusText = a || "", this.headers = new I(s), d(this.body = t) ? this.bodyText = t : (r = t, "undefined" != typeof Blob && r instanceof Blob && (this.bodyBlob = t, (0 === (o = t).type.indexOf("text") || -1 !== o.type.indexOf("json")) && (this.bodyText = (n = t, new c(function (t) {
      var e = new FileReader;
      e.readAsText(n), e.onload = function () {
        t(e.result)
      }
    })))))
  };
  q.prototype.blob = function () {
    return v(this.bodyBlob)
  }, q.prototype.text = function () {
    return v(this.bodyText)
  }, q.prototype.json = function () {
    return v(this.text(), function (t) {
      return JSON.parse(t)
    })
  }, Object.defineProperty(q.prototype, "data", {
    get: function () {
      return this.body
    },
    set: function (t) {
      this.body = t
    }
  });
  var H = function (t) {
    var e;
    this.body = null, this.params = {}, w(this, t, {
      method: (e = t.method || "GET", e ? e.toUpperCase() : "")
    }), this.headers instanceof I || (this.headers = new I(this.headers))
  };
  H.prototype.getUrl = function () {
    return $(this)
  }, H.prototype.getBody = function () {
    return this.body
  }, H.prototype.respondWith = function (t, e) {
    return new q(t, w(e || {}, {
      url: this.getUrl()
    }))
  };
  var B = {
    "Content-Type": "application/json;charset=utf-8"
  };

  function M(t) {
    var e = this || {},
      n = function (i) {
        var s = [k],
          u = [];

        function t(t) {
          for (; s.length;) {
            var e = s.pop();
            if (l(e)) {
              var o = void 0,
                n = void 0;
              if (m(o = e.call(i, t, function (t) {
                  return n = t
                }) || n)) return new c(function (t, n) {
                u.forEach(function (e) {
                  o = v(o, function (t) {
                    return e.call(i, t) || t
                  }, n)
                }), v(o, t, n)
              }, i);
              l(o) && u.unshift(o)
            } else r = "Invalid interceptor of type " + typeof e + ", must be a function", "undefined" != typeof console && a && console.warn("[VueResource warn]: " + r)
          }
          var r
        }
        return m(i) || (i = null), t.use = function (t) {
          s.push(t)
        }, t
      }(e.$vm);
    return function (n) {
      o.call(arguments, 1).forEach(function (t) {
        for (var e in t) void 0 === n[e] && (n[e] = t[e])
      })
    }(t || {}, e.$options, M.options), M.interceptors.forEach(function (t) {
      d(t) && (t = M.interceptor[t]), l(t) && n.use(t)
    }), n(new H(t)).then(function (t) {
      return t.ok ? t : c.reject(t)
    }, function (t) {
      var e;
      return t instanceof Error && (e = t, "undefined" != typeof console && console.error(e)), c.reject(t)
    })
  }

  function N(n, o, t, r) {
    var i = this || {},
      s = {};
    return g(t = w({}, N.actions, t), function (t, e) {
      t = T({
        url: n,
        params: w({}, o)
      }, r, t), s[e] = function () {
        return (i.$http || M)(function (t, e) {
          var n, o = w({}, t),
            r = {};
          switch (e.length) {
            case 2:
              r = e[0], n = e[1];
              break;
            case 1:
              /^(POST|PUT|PATCH)$/i.test(o.method) ? n = e[0] : r = e[0];
              break;
            case 0:
              break;
            default:
              throw "Expected up to 2 arguments [params, body], got " + e.length + " arguments"
          }
          return o.body = n, o.params = w({}, o.params, r), o
        }(t, arguments))
      }
    }), s
  }

  function D(n) {
    var t, e, o;
    D.installed || (e = (t = n).config, o = t.nextTick, r = o, a = e.debug || !e.silent, n.url = $, n.http = M, n.resource = N, n.Promise = c, Object.defineProperties(n.prototype, {
      $url: {
        get: function () {
          return b(n.url, this, this.$options.url)
        }
      },
      $http: {
        get: function () {
          return b(n.http, this, this.$options.http)
        }
      },
      $resource: {
        get: function () {
          return n.resource.bind(this)
        }
      },
      $promise: {
        get: function () {
          var e = this;
          return function (t) {
            return new n.Promise(t, e)
          }
        }
      }
    }))
  }
  return M.options = {}, M.headers = {
    put: B,
    post: B,
    patch: B,
    delete: B,
    common: {
      Accept: "application/json, text/plain, */*"
    },
    custom: {}
  }, M.interceptor = {
    before: function (t) {
      l(t.before) && t.before.call(this, t)
    },
    method: function (t) {
      t.emulateHTTP && /^(PUT|PATCH|DELETE)$/i.test(t.method) && (t.headers.set("X-HTTP-Method-Override", t.method), t.method = "POST")
    },
    jsonp: function (t) {
      "JSONP" == t.method && (t.client = n)
    },
    json: function (t) {
      var e = t.headers.get("Content-Type") || "";
      return m(t.body) && 0 === e.indexOf("application/json") && (t.body = JSON.stringify(t.body)),
        function (o) {
          return o.bodyText ? v(o.text(), function (t) {
            var e, n;
            if (0 === (o.headers.get("Content-Type") || "").indexOf("application/json") || (n = (e = t).match(/^\s*(\[|\{)/)) && {
                "[": /]\s*$/,
                "{": /}\s*$/
              } [n[1]].test(e)) try {
              o.body = JSON.parse(t)
            } catch (t) {
              o.body = null
            } else o.body = t;
            return o
          }) : o
        }
    },
    form: function (t) {
      var e;
      e = t.body, "undefined" != typeof FormData && e instanceof FormData ? t.headers.delete("Content-Type") : m(t.body) && t.emulateJSON && (t.body = $.params(t.body), t.headers.set("Content-Type", "application/x-www-form-urlencoded"))
    },
    header: function (n) {
      g(w({}, M.headers.common, n.crossOrigin ? {} : M.headers.custom, M.headers[p(n.method)]), function (t, e) {
        n.headers.has(e) || n.headers.set(e, t)
      })
    },
    cors: function (t) {
      if (s) {
        var e = $.parse(location.href),
          n = $.parse(t.getUrl());
        n.protocol === e.protocol && n.host === e.host || (t.crossOrigin = !0, t.emulateHTTP = !1, R || (t.client = U))
      }
    }
  }, M.interceptors = ["before", "method", "jsonp", "json", "form", "header", "cors"], ["get", "delete", "head", "jsonp"].forEach(function (n) {
    M[n] = function (t, e) {
      return this(w(e || {}, {
        url: t,
        method: n
      }))
    }
  }), ["post", "put", "patch"].forEach(function (o) {
    M[o] = function (t, e, n) {
      return this(w(n || {}, {
        url: t,
        method: o,
        body: e
      }))
    }
  }), N.actions = {
    get: {
      method: "GET"
    },
    save: {
      method: "POST"
    },
    query: {
      method: "GET"
    },
    update: {
      method: "PUT"
    },
    remove: {
      method: "DELETE"
    },
    delete: {
      method: "DELETE"
    }
  }, "undefined" != typeof window && window.Vue && window.Vue.use(D), D
});